In storage technology, a storage server is a class of computer that provides services relating to the organization and storage of information or data on storage devices such as disk drives (“disks”). In other words, a storage server is adapted to store and retrieve data on behalf of one or more client processing systems (“clients” or “hosts”) in response to external requests received from the hosts. A storage server can provide clients with file-level access to data stored in the storage devices. A storage server can also provide clients with block-level access to stored data, or with both file-level access and block-level access. For convenience, a storage server will be described herein, for the most part, in terms of storage devices that provide file-level access, though the description herein will also have application to storage devices that provide block-level access, as will be apparent to those of ordinary skill in the art in light of the description that follows. Examples of such storage servers include a file server or another type of computing device that provides storage services using a file system to respond to file-oriented data access requests (“filer”). A storage server includes a storage operating system that implements a file system to logically organize the information as a hierarchical structure of directories and files on the disks. Each file stored on a disk or other type of storage device may be implemented as a set of data structures, e.g., disk blocks, which are configured to store information.
A disk-based storage for a storage server typically has one or more storage “volumes” which are a collection of physical storage disks and which define an overall logical arrangement of storage space. In other words, a storage volume is a logical container that includes a collection of disks. Therefore, the collection of disks is grouped (assimilated) into the storage volume. Each storage volume is generally associated with its own file system.
A software application can seek access to a file system in order to determine the changes that have occurred for files or directories in the file system. In one instance, such determined changes of the file system could be utilized by the software application to create a backup of a storage server the file system is associated with. However, current methods for discovering the changes in a file system would require the software application to traverse through each directory and through each branch from a directory in a file system (a process known as a “tree walk”, since the file system is typically tree-structured), and to examine each file in each directory to determine which files have been modified, added, or accessed. The software application (which is external to a storage server that stores a file system) is required to perform multiple reads to the file system by use of the tree-walk process across the directories in the file system, store the results of the multiple reads to the file system, and then determine the changes in the file system based on the results of these multiple reads. Such a process creates a huge latency. The tree-walk process is further inefficient because of additional latency when data read from the directories have been stored on disk in a non-sequential and random placement. Such non-sequential and random placement of data results in a longer time to access the data.
Accordingly, the current technology is limited in its capabilities and suffers from at least the above constraints and deficiencies.